﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Text;

namespace vncom.Controllers
{
    public class CommonController : Controller
    {
        public FileResult CreateCaptcha(string id)
        {
            string[] fonts = { "Arial Black", "Lucida Sans Unicode", "Time New Roman" };
            // số lượng kí tự của captcha
            const byte LENGTH = 4;
            // chuỗi để lấy các kí tự sẽ sử dụng cho captcha
            const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            // tạo ảnh bitmap.
            string iname = Guid.NewGuid().ToString();
            using (Bitmap bmp = new Bitmap(80, 30))
            {
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    // Tạo nền cho ảnh dạng nhiều dấu chấm
                    HatchBrush brush = new HatchBrush(HatchStyle.DottedDiamond, Color.Green, Color.GreenYellow);
                    g.FillRegion(new System.Drawing.SolidBrush(Color.FromArgb(0, 120, 0)), g.Clip);
                    // Lưu chuỗi captcha trong quá trình tạo
                    StringBuilder strCaptcha = new StringBuilder();
                    Random rand = new Random();
                    for (int i = 0; i < LENGTH; i++)
                    {
                        // Lấy kí tự ngẫu nhiên từ mảng chars
                        string str = chars[rand.Next(chars.Length)].ToString();
                        strCaptcha.Append(str);
                        // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts
                        Font font = new Font(fonts[rand.Next(fonts.Length)], 14, FontStyle.Strikeout | FontStyle.Italic);
                        // Lấy kích thước của kí tự
                        SizeF size = g.MeasureString(str, font);
                        // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                        g.DrawString(str, font,
                        Brushes.White, i * 20, rand.Next(-2, 10));
                        font.Dispose();
                    }
                    // Lưu captcha vào session
                    Session["captcha"] = strCaptcha.ToString();
                    // Lưu ảnh vào thư mục captcha với tên ảnh dựa theo IP
                    string path = iname + ".gif";
                    bmp.Save(Server.MapPath("/Captcha/") + path, ImageFormat.Gif);
                }
            }
            var dir = Server.MapPath("/Captcha");
            var ipath = Path.Combine(dir, iname + ".gif");
            return base.File(ipath, "image/gif");
        }

        public ActionResult DisplayCaptch()
        {
            return View();
        }

    }
}
